#include <iostream>
using namespace std;
/*
    细菌扩散，核心思想：
    1. 分为两个数组来计算存储便于分类讨论
    2. 第一种，中心细菌的变换（覆盖培养皿）
    3. 第二种，周围细菌扩散的变化（因为扩散需要旧培养皿的细菌分布情况，所以要两个数组）
*/
int main()
{
    int new_[9][9] = {0}, old_[9][9] = {0};
    int nums, days;
    cin >> nums >> days;
    new_[4][4] = nums;
    old_[4][4] = nums;
    for (size_t day = 0; day < days; day++)
    {
        // 中心细菌的变化
        for (size_t i = 0; i < 9; i++) // 逐行扫描
        {
            for (size_t j = 0; j < 9; j++) // 逐列扫描
            {
                if (new_[i][j] != 0)
                {
                    old_[i][j] = new_[i][j];     // 旧培养基相当于一个储存容器，储存上一天的培养基情况
                    new_[i][j] = new_[i][j] * 2; //每个位置上的每个旧细菌生两个崽，然后凋亡
                }
            }
        }
        // 周围细菌的变化
        for (size_t i = 0; i < 9; i++) // 逐行扫描
        {
            for (size_t j = 0; j < 9; j++) // 逐列扫描
            {
                if (old_[i][j] != 0) //如果旧培养基上某个位置有细菌，就在新培养基上它的周围生出一圈崽儿
                {
                    new_[i - 1][j - 1] = new_[i - 1][j - 1] + old_[i][j]; // 如果中间有n个细菌，那么周围的一圈都会增加n个细菌，所以这里会加old[i][j]
                    new_[i - 1][j] = new_[i - 1][j] + old_[i][j];
                    new_[i - 1][j + 1] = new_[i - 1][j + 1] + old_[i][j];
                    new_[i][j - 1] = new_[i][j - 1] + old_[i][j];
                    new_[i][j + 1] = new_[i][j + 1] + old_[i][j];
                    new_[i + 1][j - 1] = new_[i + 1][j - 1] + old_[i][j];
                    new_[i + 1][j] = new_[i + 1][j] + old_[i][j];
                    new_[i + 1][j + 1] = new_[i + 1][j + 1] + old_[i][j];
                }
            }
        }
    }
    for (size_t i = 0; i < 9; i++) // 逐行扫描
    {
        for (size_t j = 0; j < 9; j++) // 逐列扫描
        {
            cout << new_[i][j] << " ";
        }
        cout << endl;
    }
}